<template>
  <div class="JNPF-common-layout">
    <div class="JNPF-common-layout-center">
      <el-row class="JNPF-common-search-box" :gutter="16">
        <el-form @submit.native.prevent>

          <el-col :span="6">
            <el-form-item label="单据号">
              <el-input v-model="query.billcode" placeholder="请输入" clearable> </el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="单据日期">
              <el-date-picker v-model="query.billdate" value-format="timestamp" format="yyyy-MM-dd"
                start-placeholder="开始日期" end-placeholder="结束日期" type="daterange" />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="制单人">
              <userSelect v-model="query.creatoruserid" placeholder="请选择" />
            </el-form-item>
          </el-col>
          <template v-if="showAll">
            <el-col :span="6">
              <el-form-item label="使用人">
                <user-select v-model="query.user" placeholder="请选择
                                                " clearable />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="审批时间">
                <el-input v-model="query.approvetime" placeholder="请输入" clearable> </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="审批人">
                <el-input v-model="query.approveuser" placeholder="请输入" clearable> </el-input>
              </el-form-item>
            </el-col>
          </template>
          <el-col :span="6">
            <el-form-item>
              <el-button type="primary" icon="el-icon-search" @click="search()">查询</el-button>
              <el-button icon="el-icon-refresh-right" @click="reset()">重置</el-button>
              <el-button type="text" icon="el-icon-arrow-down" @click="showAll=true" v-if="!showAll">
                展开
              </el-button>
              <el-button type="text" icon="el-icon-arrow-up" @click="showAll=false" v-else>
                收起
              </el-button>
            </el-form-item>
          </el-col>
        </el-form>
      </el-row>
      <div class="JNPF-common-layout-main JNPF-flex-main">
        <div class="JNPF-common-head">
          <div>
            <el-button type="primary" icon="el-icon-plus" @click="addOrUpdateHandle()">新增
            </el-button>
            <el-button type="text" icon="el-icon-download" @click="exportData()">导出
            </el-button>
            <el-button type="text" icon="el-icon-delete" @click="handleBatchRemoveDel()">批量删除
            </el-button>
          </div>
          <div class="JNPF-common-head-right">
            <el-tooltip content="高级查询" placement="top" v-if="true">
              <el-link icon="icon-ym icon-ym-filter JNPF-common-head-icon" :underline="false"
                @click="openSuperQuery()" />
            </el-tooltip>
            <el-tooltip effect="dark" :content="$t('common.refresh')" placement="top">
              <el-link icon="icon-ym icon-ym-Refresh JNPF-common-head-icon" :underline="false" @click="initData()" />
            </el-tooltip>
          </div>
        </div>
        <JNPF-table v-loading="listLoading" :data="list" @sort-change='sortChange' :span-method="arraySpanMethod" has-c
          @selection-change="handleSelectionChange" row-key="id" :tree-props="{children: 'children', hasChildren: ''}"
          default-expand-all>
          <el-table-column prop="billcode_name" label="单据号" align="left">
            <template slot-scope="scope">
              <span v-if="scope.row.top">{{scope.row.billcode_name}}</span>
              <span v-else>{{scope.row.billcode}}</span>
            </template>
          </el-table-column>

          <el-table-column prop="billdate_name" label="单据日期" align="left" />

          <el-table-column prop="creatoruserid_name" label="制单人" align="left" />

          <el-table-column prop="usedept_name" label="使用部门" align="left" />

          <el-table-column prop="user_name" label="使用人" align="left" />

          <el-table-column prop="approvetime_name" label="审批时间" align="left" />

          <el-table-column prop="approveuser_name" label="审批人" align="left" />

          <el-table-column prop="lastmodifyuserid_name" label="修改用户" align="left" />

          <el-table-column prop="lastmodifytime_name" label="修改时间" align="left" />

          <el-table-column prop="tableField116" label="采购申请子表" align="center">
            <el-table-column prop="tableField116-child-first" width="1px" label-class-name="table-child-first"
              class-name="child-table-box">
              <template slot-scope="scope" v-if="!scope.row.top">
                <div class="child-table-column">
                  <template v-if="!scope.row.tableField116Expand">
                    <tr v-for="(item, index) in scope.row.tableField116.slice(0, 3)" class="child-table__row"
                      :key="index">
                      <td class="td-child-first">
                        <div class="cell"></div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.matcode  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.suppliercode  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.num  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.price  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.amount  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.demandtime  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.usedept  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.user  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.plannumid  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell" @click="open(item)">

                         <span style="color: #330099"> 查看附件</span>
                        </div>
                      </td>
                      <td class="td-flex-1"@click="openSu(item)">
                        <div class="cell">
                          <span style="color: #330099"> 查看附件</span>
                        </div>
                      </td>
                    </tr>
                  </template>
                  <template v-if="scope.row.tableField116Expand">
                    <tr v-for="(item, index) in scope.row.tableField116" class="child-table__row" :key="index">
                      <td class="td-child-first">
                        <div class="cell"></div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.matcode  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.suppliercode  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.num  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.price  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.amount  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.demandtime  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.usedept  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.user  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.plannumid  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.matenclosure  }}
                        </div>
                      </td>
                      <td class="td-flex-1">
                        <div class="cell">
                          {{ item.supplierenclosure  }}
                        </div>
                      </td>
                    </tr>
                  </template>
                  <div class="expand-more-btn" v-if="scope.row.tableField116.length > 3">
                    <el-button v-if="scope.row.tableField116Expand" type="text"
                      @click="scope.row.tableField116Expand=!scope.row.tableField116Expand">隐藏部分</el-button>
                    <el-button v-if="!scope.row.tableField116Expand" type="text"
                      @click="scope.row.tableField116Expand=!scope.row.tableField116Expand">加载更多</el-button>
                  </div>
                </div>
              </template>
            </el-table-column>
            <el-table-column prop="tableField116-matcode" label="物料编码" width="100" />
            <el-table-column prop="tableField116-suppliercode" label="供应商编码" width="100" />
            <el-table-column prop="tableField116-num" label="数量" width="100" />
            <el-table-column prop="tableField116-price" label="单价" width="100" />
            <el-table-column prop="tableField116-amount" label="金额" width="100" />
            <el-table-column prop="tableField116-demandtime" label="需求时间" width="100" />
            <el-table-column prop="tableField116-usedept" label="使用部门" width="100" />
            <el-table-column prop="tableField116-user" label="使用人" width="100" />
            <el-table-column prop="tableField116-plannumid" label="计划号主键" width="100" />
            <el-table-column prop="tableField116-matenclosure" label="物料附件" width="100" />
            <el-table-column prop="tableField116-supplierenclosure" label="供应商附件" width="100" />
          </el-table-column>


          <el-table-column prop="flowState" label="状态" width="100">
            <template slot-scope="scope" v-if="!scope.row.top">
              <el-tag v-if="scope.row.flowState==1">等待审核</el-tag>
              <el-tag type="success" v-else-if="scope.row.flowState==2">审核通过</el-tag>
              <el-tag type="danger" v-else-if="scope.row.flowState==3">审核驳回</el-tag>
              <el-tag type="info" v-else-if="scope.row.flowState==4">流程撤回</el-tag>
              <el-tag type="info" v-else-if="scope.row.flowState==5">审核终止</el-tag>
              <el-tag type="warning" v-else>等待提交</el-tag>
            </template>
          </el-table-column>
          <el-table-column label="操作" fixed="right" width="150">
            <template slot-scope="scope" v-if="!scope.row.top">
              <el-button type="text" :disabled="[1,2,4,5].indexOf(scope.row.flowState)>-1"
                @click="addOrUpdateHandle(scope.row.id)">编辑
              </el-button>
              <el-button type="text" class="JNPF-table-delBtn" :disabled="[1,2,3,5].indexOf(scope.row.flowState)>-1"
                @click="handleDel(scope.row.id)">删除
              </el-button>
              <el-button size="mini" type="text" :disabled="!scope.row.flowState"
                @click="addOrUpdateHandle(scope.row.id,scope.row.flowState)">详情</el-button>
            </template>
          </el-table-column>
        </JNPF-table>
          <pagination :total="total" :page.sync="listQuery.currentPage" :limit.sync="listQuery.pageSize" @pagination="initData"/>
      </div>
    </div>
    <FlowBox v-if="flowVisible" ref="FlowBox" @close="colseFlow" />
    <ExportBox v-if="exportBoxVisible" ref="ExportBox" @download="download" />
    <SuperQuery v-if="superQueryVisible" ref="SuperQuery" :columnOptions="superQueryJson" @superQuery="superQuery" />
  </div>
</template>

<script>
  import request from '@/utils/request'
  import {
    getDictionaryDataSelector
  } from '@/api/systemData/dictionary'
  import FlowBox from '@/views/workFlow/components/FlowBox'
  import ExportBox from './ExportBox'
  import {
    getDataInterfaceRes
  } from '@/api/systemData/dataInterface'

  import columnList from './columnList'
  import SuperQuery from '@/components/SuperQuery'
  import superQueryJson from './superQueryJson'
import axios from "axios"
  export default {
    components: {
      FlowBox,
      ExportBox,
      SuperQuery
    },
    data() {
      return {
        total:0,
        openData:[],
        expandObj: {},
        columnOptions: [],
        mergeList: [],
        columnList: [],

        showAll: false,
        superQueryVisible: false,
        superQueryJson,
        query: {
          billcode: undefined,
          billdate: undefined,
          creatoruserid: undefined,
          user: undefined,
          approvetime: undefined,
          approveuser: undefined,
        },
        treeProps: {
          children: 'children',
          label: 'fullName',
          value: 'id'
        },
        list: [],
        listLoading: true,
        multipleSelection: [],
        total: 0,
        listQuery: {
          superQueryJson: '',
          currentPage: 1,
          pageSize: 20,
          sort: "desc",
          sidx: "billdate",
        },
        flowVisible: false,
        exportBoxVisible: false,
        tableField116_matcodecolumnOptions: [{
          "label": "物料编码",
          "value": "F_MatCode"
        }, {
          "label": "物料名称",
          "value": "F_MatName"
        }, {
          "label": "物料规格",
          "value": "F_MatSpec"
        }, ],
        tableField116_suppliercodecolumnOptions: [{
          "label": "供应商编码",
          "value": "F_Code"
        }, {
          "label": "供应商名称",
          "value": "F_Name"
        }, ],
        tableField116_plannumidcolumnOptions: [{
          "label": "计划号",
          "value": "F_PlanCode"
        }, {
          "label": "主键",
          "value": "F_Id"
        }, ],
      }
    },
    computed: {
      menuId() {
        return this.$route.meta.modelId || ''
      }
    },
    created() {
      this.columnList = columnList.filter(o => o.__vModel__ !== 'billcode')
      this.getColumnList(),
        this.initData()
    },
    methods: {
      openSu(item){
        var str=item.supplierenclosure
             var arr
            if(str !=undefined || str !=''){
                 arr =eval('('+str+')');
                 for (var key in arr){
                       console.log(arr[key])
                       var supplierenclosureurl
                supplierenclosureurl=arr[key].url

                    window.open('http://47.108.112.182:30000'+supplierenclosureurl);
             axios.get('http://47.108.112.182:30000'+supplierenclosureurl)
        }

            }
      },
      open(item){

                var str=item.matenclosure
                 var arr
                if(str !=undefined || str !=''){
                     arr =eval('('+str+')');
                     for (var key in arr){
                           console.log(arr[key])
                           var matenclosureurl
                    matenclosureurl=arr[key].url

                        window.open('http://47.108.112.182:30000'+matenclosureurl);
                 axios.get('http://47.108.112.182:30000'+matenclosureurl)
            }

                }


      },
      getColumnList() {
        // 没有开启权限
        this.columnOptions = this.transformColumnList(this.columnList)
      },
      transformColumnList(columnList) {
        let list = []
        for (let i = 0; i < columnList.length; i++) {
          const e = columnList[i];
          if (!e.prop.includes('-')) {
            list.push(e)
          } else {
            let prop = e.prop.split('-')[0]
            let label = e.label.split('-')[0]
            let vModel = e.prop.split('-')[1]
            let newItem = {
              align: "center",
              jnpfKey: "table",
              prop,
              label,
              children: []
            }
            e.vModel = vModel
            if (!this.expandObj.hasOwnProperty(`${prop}Expand`)) this.$set(this.expandObj, `${prop}Expand`, false)
            if (!list.some(o => o.prop === prop)) list.push(newItem)
            for (let i = 0; i < list.length; i++) {
              if (list[i].prop === prop) {
                list[i].children.push(e)
                break
              }
            }
          }
        }
        this.getMergeList(list)
        return list
      },
      arraySpanMethod({
        column
      }) {
        for (let i = 0; i < this.mergeList.length; i++) {
          if (column.property == this.mergeList[i].prop) {
            return [this.mergeList[i].rowspan, this.mergeList[i].colspan]
          }
        }
      },
      getMergeList(list) {
        let newList = JSON.parse(JSON.stringify(list))
        newList.forEach(item => {
          if (item.children && item.children.length) {
            let child = {
              prop: item.prop + '-child-first'
            }
            item.children.unshift(child)
          }
        })
        newList.forEach(item => {
          if (item.children && item.children.length > 0) {
            item.children.forEach((child, index) => {
              if (index == 0) {
                this.mergeList.push({
                  prop: child.prop,
                  rowspan: 1,
                  colspan: item.children.length
                })
              } else {
                this.mergeList.push({
                  prop: child.prop,
                  rowspan: 0,
                  colspan: 0
                })
              }
            })
          } else {
            this.mergeList.push({
              prop: item.prop,
              rowspan: 1,
              colspan: 1
            })
          }
        })
      },
      sortChange({
        column,
        prop,
        order
      }) {
        this.listQuery.sort = order == 'ascending' ? 'asc' : 'desc'
        this.listQuery.sidx = !order ? '' : prop
        this.initData()
      },
      initData() {
        this.listLoading = true;
        let _query = {
          ...this.listQuery,
          ...this.query,
          dataType: 0,
          menuId: this.menuId
        };
        request({
          url: `/api/example/GyPurApply/getList`,
          method: 'post',
          data: _query
        }).then(res => {
          var _list = [];
          for (let i = 0; i < res.data.list.length; i++) {
            let _data = res.data.list[i];
            for (let k = 0; k < _data.children.length; k++) {
              let children = _data.children[k];
              children.tableField116Expand = false
              for (let z = 0; z < children.tableField116.length; z++) {
                let tableField116 = children.tableField116[z];
                tableField116.demandtime = this.jnpf.toDate(tableField116.demandtime, 'yyyy-MM-dd HH:mm:ss')







              }
            }
            _list.push(_data)
          }
          this.list = _list.map(o => ({
            top: true,
            ...o
          }))
           this.total = res.data.pagination.total
          this.listLoading = false
        })
      },
      handleDel(id) {
        this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
          type: 'warning'
        }).then(() => {
          request({
            url: `/api/example/GyPurApply/${id}`,
            method: 'DELETE'
          }).then(res => {
            this.$message({
              type: 'success',
              message: res.msg,
              onClose: () => {
                this.initData()
              }
            });
          })
        }).catch(() => {});
      },
      handleSelectionChange(val) {
        const res = val.map(item => item.id)
        this.multipleSelection = res
      },
      handleBatchRemoveDel() {
        if (!this.multipleSelection.length) {
          this.$message({
            type: 'error',
            message: '请选择一条数据',
            duration: 1500,
          })
          return
        }
        const ids = this.multipleSelection.join()
        this.$confirm('您确定要删除这些数据吗, 是否继续？', '提示', {
          type: 'warning'
        }).then(() => {
          request({
            url: `/api/example/GyPurApply/batchRemove/${ids}`,
            method: 'DELETE'
          }).then(res => {
            this.$message({
              type: 'success',
              message: res.msg,
              onClose: () => {
                this.initData()
              }
            });
          })
        }).catch(() => {})
      },
      openSuperQuery() {
        this.superQueryVisible = true
        this.$nextTick(() => {
          this.$refs.SuperQuery.init()
        })
      },
      superQuery(queryJson) {
        this.listQuery.superQueryJson = queryJson
        this.listQuery.currentPage = 1
        this.initData()
      },
      addOrUpdateHandle(id, flowState) {
        let data = {
          id: id || '',
          enCode: 'cgsqwh',
          flowId: '372753158620847557',
          formType: 1,
          opType: flowState ? 0 : '-1',
          status: flowState
        }
        this.flowVisible = true
        this.$nextTick(() => {
          this.$refs.FlowBox.init(data)
        })
      },

      exportData() {
        this.exportBoxVisible = true
        this.$nextTick(() => {
          this.$refs.ExportBox.init(this.columnList)
        })
      },
      download(data) {
        let query = {
          ...data,
          ...this.listQuery,
          ...this.query,
          menuId: this.menuId
        }
        request({
          url: `/api/example/GyPurApply/Actions/Export`,
          method: 'post',
          data: query
        }).then(res => {
          if (!res.data.url) return
          this.jnpf.downloadFile(res.data.url)
          this.$refs.ExportBox.visible = false
          this.exportBoxVisible = false
        })
      },
      search() {
        this.listQuery.currentPage = 1
        this.listQuery.pageSize = 20
        this.listQuery.sort = "desc"
        this.listQuery.sidx = "billdate"
        this.initData()
      },
      colseFlow(isrRefresh) {
        this.flowVisible = false
        if (isrRefresh) this.reset()
      },
      reset() {
        for (let key in this.query) {
          this.query[key] = undefined
        }
        this.search()
      }
    }
  }
</script>
